package com.example.rabbit.consumer;

import com.example.rabbit.config.TTLQueueConfig;
import com.rabbitmq.client.BuiltinExchangeType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * 自动创建队列 消费者
 * <p>
 * 收到 normal_queue_b 队列的消息 那么就创建队列
 * 在控制台将 normal_queue_b 删除
 *
 * @Author ifredomvip@gmail.com
 * @Date 2022/8/10 16:33
 * @Version 1.0.0
 * @Description 注意： 当前包下 智能由一个添加注解 @Component，因为监听的同一个队列
 **/
@Slf4j
//@Component
public class AutoCreatorConsumer3 {

    /**
     * 2. 自动创建队列
     *
     * @param message
     *
     * 注解 @RabbitListener(queuesToDeclare = @Queue("normal_queue_b"))
     */
    public void process2(String message) {
        log.info("MqReceiver2: {}", message);
    }

    /**
     * 3. 自动创建队列  并 绑定交换器
     *
     * @param message 消息
     */
    @RabbitListener(bindings = @QueueBinding(value = @Queue("normal_queue_b"),
            exchange = @Exchange(name = TTLQueueConfig.NORMAL_EXCHANGE_NAME, type = "direct"),
            key = {TTLQueueConfig.ROUTING_KEY_B}))
    public void process3(String message) {
        log.info("自动创建队列并绑定交换器 Receiver: {}", message);
    }

    /**
     * 3.1. 自动创建队列  并 绑定交换器
     * 如果想要在队列上添加参数arguments，目前能想到的办法是先创建queue bean，然后引用,测试后不生效
     *
     * @param message 消息
     */

}
